1. 루팅탐지 우회 취약점
1.1 개요
루팅이란 말 그대로
root
의 권한을 디바이스 내에서 획득할 수 있도록 하는 것입니다. root권한은 공급자나 배포지에서 root
권한을 획득할 수 없도록 권한 상승 명령어를 제거하여 배포하는데 이때, 제한을 풀거나 우회하여 루트 권한을 획득하면 하드웨어 성능 조작, 제조사 및 통신사 기본 어플 삭제, 시스템 권한을 이용한 다양한 디바이스 조작이 가능해집니다
. 1.2 탐지
루팅된 기기에 어플리케이션이 동작할 경우
/data
폴더 등 중요 폴더의 데이터의 변조와 조회가 가능해집니다. 따라서 어플리케이션 공급자는 어플리케이션이 설치된 기기가 루팅이 되었는지 탐지합니다.
탐지에 사용되는 경로는 다음과 같습니다.
1.3 취약점
당연하게도 루팅 탐지 로직이 없다면 취약한 것이고, 해당 탐지 로직을 우회하여 루팅에 성공하여도 취약하다고 할 수 있습니다.
2. 실습
2.1 루팅탐지 로직 확인
루팅 탐지 화면
인시큐어뱅크 앱을 보면, Rooting이 되어있는지 확인하고 결과를 알려주는 Activity가 있어 보입니다. 해당 코드를 추적해 보겠습니다.
코드리뷰
- 루팅 탐지
PostLogin
클래스를 보면 showRootStatus 함수를 실행시킵니다.
- 해당 함수는
doesSuperuserApkExist
와doesSUexist
함수를 실행시킵니다.
- 실행 결과를 바탕으로 해당 기기가 루팅이 되었는지 확인합니다.
- SuperuserApkExist 함수
/system/app/Superuser.apk
파일이 있는지 확인합니다.
- 파일이 있다면 true를, 없다면 false를 반환합니다.
- doesSUexist 함수
- linux의
which
명령어로su
명령어가 어떤 경로에 있는지 확인합니다.
su
명령어에 대한 응답이 있다면 true를 반환하고, 아니면 false를 반환합니다.
우회
rooting 탐지에 대한 우회는 정말 다양하고 정답이 없습니다. 해당 어플리케이션에서 탐지를 우회한다면 방법은 다음과 같습니다.
- SuperuserApk의 이름 변경
- su 명령어 비활성화 및 su 파일 이름 변경
- Frida를 이용한 루팅탐지 우회
2.2 대응방안
- 루팅 탐지 로직 작성
- 루팅 탐지시, 탐지하는 부분을 노출하지 않습니다.
- 난독화 등으로 어떤 파일을 검사하고, 어떤 프로세스를 실행시키는지 코드리뷰로 확인할 수 없도록 합니다.